import UcRequest, { UcResponse } from './ucRequest'
import ucConfig from '../ucConfig'
/**
 * 同步登录
 * 
 * 登录bbs时要调用这个接口
 * 
 * 该请求发出后将获得登录论坛账户的链接，客户浏览器中访问该链接即可实现`同步登录`
 * 
 * 需要注意，`同步登录`后并不一定会跳转到论坛。如果需要`同步登陆`后自动跳转到论坛，可以在`同步登陆`的链接后面加上`jumpTo`参数，如下：
 * 
 * ```
 * // `loginResp`为`UserSynLoginResponse`的实例
 * let loginUrl = loginResp.loginUrl+'&jumpTo=' + encodeURIComponent(ucConfig.bbsAppUrl); // 跳转目标地址需要进行url encode
 * ```
 */
export default class UserSynLoginRequest extends UcRequest
{
    module = 'user'
    action = 'synlogin'
    httpMethod = 'post'
    /**
     * 
     * @param {number} userId ucenter侧的账户ID
     */
    constructor(userId){
        super()
        this.params = {
            uid:userId,
        }
    }
    
}

export class UserSynLoginResponse extends UcResponse
{
    constructor(respRaw){
        super(respRaw);
        // 如果在UCenter中当前应用的“是否开启同步登录”选项设置为否，异步登录接口将返回空字符串
        // 如果UCenter中的用户不存在，接口也将返回空字符串
        // 用户如果存在，UCenter将返回含有一到多个<script>标签的字符串，每个<script>标签中包含一个将“是否开启同步登录”设置为“是”的应用
        // 找到要登陆的应用的script标签，访问script中的链接即可完成同步登录的操作
        let testLoginUrl = /(?<=\ssrc=(?<quot>\"|\'))(?<url>.*?)(?=\k<quot>)/, // 构造匹配bbs对应的url的正则表达式
            matched, loginUrl = "";
        while((matched = testLoginUrl.exec(respRaw)) !== null){
            if(typeof matched.groups.url === 'string' && matched.groups.url.startsWith(ucConfig.bbsAppUrl)){
                loginUrl = matched.groups.url
                break;
            }
        }
        if(typeof loginUrl === 'string' && loginUrl.length > 0){
            this.errCode = 1;
            this.errMsg = '操作成功';
            this.isSuccess = true;
            this.loginUrl = loginUrl;
        }else{
            this.errCode = -1;
            this.errMsg = '操作失败：'+(respRaw.length>0 ? 
                '1.请检查论坛主URl是否和UCenter中的一致；2.请检查UCenter中论坛应用是否开启同步登陆':
                '1. 请检查账户是否存在；2.请检查UCenter中当前应用以及论坛应用是否开启同步登陆');
            this.isSuccess = false;
        }
        
    }
}